from time import time

a=6

def local_fun():
    """
    将局部变量  变成全局变量
    """
    global a   # 使用 global 关键字将局部变量变成全局变量
    a=66
    print(a)

#local_fun()
#print(a)

def enclose():
    """
    将局部变量变成自由变量
    :return:
    """
    total=0
    count=0
    def fun(value):
        nonlocal total,count # 使用 nonlocal 关键字将局部变量变成全局变量
        total+=value
        count+=1
        return total/count

    return fun

#ave=enclose()
#print(ave(1))

#输出函数执行时间装饰器
def time_deco(fun):
    def wrapper(*args,**kwargs):
        start_time=time()
        result=fun(*args,**kwargs)
        end_time=time()
        print(f"{fun.__name__}执行时间:{format(end_time-start_time,'.2f')}秒")
        return  result
    return wrapper


def cache_deco(fun):
    """
    为 斐波那列数列 添加缓存
    :param fun:
    :return:
    """
    cache={}

    def wrapper(*args):
        if args not in cache:
            cache[args]=fun(*args)
        return cache[args]

    return wrapper

@cache_deco
@time_deco
def f(n):
    """
    使用 递归重构斐裂那波数列
    :param n:
    :return:
    """
    if n<=1:
        return 1
    return f(n-1)+f(n-2)

print(f(4))